A typical operating system includes a file system. The file system provides a mechanism for the storage and retrieval of files and a hierarchical directory structure for the naming of multiple files. More specifically, the file system stores information (i.e., data) provided by the client (i.e., a local or remote process) and information describing the characteristics of the data (i.e., meta-data). The file system also provides extensive programming interfaces to enable the creation and deletion of files, reading and writing of files, performing seeks within a file, creating and deleting directories, managing directory contents, etc. In addition, the file system also provides management interfaces to create and delete file systems. File systems are typically controlled and restricted by operating system parameters. For example, most operating systems limit the maximum number of file names that can be handled within their file system. Some operating systems also limit the size of files that can be managed under a file system.
An application, which may reside on the local system (i.e., computer) or may be located on a remote system, uses files as an abstraction to address data. Conventionally, this data is stored on a storage device, such as a disk. To access a file, the operating system (via the file system) typically provides file manipulation interfaces to open, close, read, and write the data within each file.
In some instances, the files need to be migrated from the current file system to a new file system. In such instances, the data (and meta-data) currently stored in the current file system must be moved to a new file system. Such a migration is typically achieved by initially taking the current file system offline (i.e., preventing clients from reading or writing to the current file system). Once offline, various techniques may be used to transfer each directory and file in the current file system to the new file system. Depending on the amount of data in the current file system, the migration may take a significant period of time, during which the data in the current file system and the new file system are inaccessible to the clients.